package com.example.blog.modules.user.service;

import com.example.blog.modules.user.dto.UserDTO;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.validation.annotation.Validated;

@Validated
public interface UserService extends UserDetailsService {
    /**
     * 注册用户
     */
    UserDTO register(@NotNull @Valid UserDTO userDTO);

    /**
     * 获取当前用户信息
     */
    UserDTO getCurrentUser();

    /**
     * 获取用户详情
     */
    UserDTO getUserById(@NotNull @Min(1) Long id);

    /**
     * 更新用户信息
     */
    UserDTO updateUser(@NotNull @Min(1) Long id, @NotNull @Valid UserDTO userDTO);

    /**
     * 删除用户
     */
    void deleteUser(@NotNull @Min(1) Long id);

    /**
     * 启用用户
     */
    void enableUser(@NotNull @Min(1) Long id);

    /**
     * 禁用用户
     */
    void disableUser(@NotNull @Min(1) Long id);

    /**
     * 重置密码
     */
    void resetPassword(
        @NotNull @Min(1) Long id,
        @NotBlank(message = "新密码不能为空") String newPassword);

    /**
     * 更新密码
     */
    void changePassword(
        @NotBlank(message = "旧密码不能为空") String oldPassword,
        @NotBlank(message = "新密码不能为空") String newPassword);

    /**
     * 发送验证邮件
     */
    void sendVerificationEmail(@NotNull @Email(message = "邮箱格式不正确") String email);

    /**
     * 验证邮箱
     */
    void verifyEmail(@NotBlank(message = "验证令牌不能为空") String token);

    /**
     * 获取用户列表
     */
    Page<UserDTO> getUsers(String keyword, @NotNull Pageable pageable);
} 